/*
 *   Copyright (c) 2024 Project CHIP Authors
 *   All rights reserved.
 *
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 *
 */

#pragma once

#include <lib/core/CHIPError.h>
#include <lib/core/Optional.h>

#include <json/json.h>
#include <string>

namespace chip {
namespace tool {
namespace https {

enum class HttpsSecurityMode
{
    kDefault           = 0,
    kDisableValidation = 1, // Use HTTPS, but disable all validations (cert, server name, ...)
    kDisableHttps      = 2, // Disable HTTPS, i.e. use plain HTTP
};

CHIP_ERROR Request(std::string url, Json::Value & jsonResponse,
                   const chip::Optional<uint32_t> & optionalExpectedSize       = chip::NullOptional,
                   const chip::Optional<const char *> & optionalExpectedDigest = chip::NullOptional,
                   HttpsSecurityMode securityMode                              = HttpsSecurityMode::kDefault);

CHIP_ERROR Request(std::string hostname, uint16_t port, std::string path, Json::Value & jsonResponse,
                   const chip::Optional<uint32_t> & optionalExpectedSize       = chip::NullOptional,
                   const chip::Optional<const char *> & optionalExpectedDigest = chip::NullOptional,
                   HttpsSecurityMode securityMode                              = HttpsSecurityMode::kDefault);

} // namespace https
} // namespace tool
} // namespace chip
